#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
视频截取脚本 - 截取视频从12秒到结尾
"""

import cv2
import os

def cut_video(input_path, output_dir, start_time=12):
    """
    截取视频从指定时间到结尾
    
    参数:
        input_path: 输入视频路径
        output_dir: 输出目录
        start_time: 开始时间(秒)，默认12秒
    """
    
    # 检查输入文件是否存在
    if not os.path.exists(input_path):
        print(f"错误: 输入文件不存在: {input_path}")
        return False
    
    # 确保输出目录存在
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)
    
    # 打开视频文件
    cap = cv2.VideoCapture(input_path)
    
    if not cap.isOpened():
        print("错误: 无法打开视频文件")
        return False
    
    # 获取视频属性
    fps = cap.get(cv2.CAP_PROP_FPS)  # 帧率
    total_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))  # 总帧数
    width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))  # 宽度
    height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))  # 高度
    
    print(f"视频信息:")
    print(f"  帧率: {fps} FPS")
    print(f"  总帧数: {total_frames}")
    print(f"  分辨率: {width}x{height}")
    print(f"  总时长: {total_frames/fps:.2f} 秒")
    
    # 计算起始帧
    start_frame = int(start_time * fps)
    
    if start_frame >= total_frames:
        print(f"错误: 起始时间 {start_time} 秒超过视频总时长")
        cap.release()
        return False
    
    print(f"\n开始从第 {start_time} 秒 (第 {start_frame} 帧) 截取视频...")
    
    # 设置起始位置
    cap.set(cv2.CAP_PROP_POS_FRAMES, start_frame)
    
    # 生成输出文件名
    input_filename = os.path.basename(input_path)
    name, ext = os.path.splitext(input_filename)
    output_filename = f"{name}_cut_from_{start_time}s{ext}"
    output_path = os.path.join(output_dir, output_filename)
    
    # 定义编码器和输出视频
    fourcc = cv2.VideoWriter_fourcc(*'mp4v')  # 使用mp4v编码
    out = cv2.VideoWriter(output_path, fourcc, fps, (width, height))
    
    if not out.isOpened():
        print("错误: 无法创建输出视频文件")
        cap.release()
        return False
    
    # 读取并写入帧
    frame_count = 0
    while True:
        ret, frame = cap.read()
        
        if not ret:
            break
        
        out.write(frame)
        frame_count += 1
        
        # 显示进度
        if frame_count % 30 == 0:
            current_time = start_time + frame_count / fps
            print(f"处理中... 已处理 {frame_count} 帧 ({current_time:.2f} 秒)", end='\r')
    
    # 释放资源
    cap.release()
    out.release()
    
    print(f"\n\n✓ 视频截取完成!")
    print(f"  截取帧数: {frame_count}")
    print(f"  输出文件: {output_path}")
    print(f"  输出时长: {frame_count/fps:.2f} 秒")
    
    return True


if __name__ == "__main__":
    # 输入视频路径
    input_video = "/home/ubuntu/文档/xwechat_files/wxid_6pzxwc8xatm122_cdc5/msg/video/2025-11/406dbe1cee867df7e97ba6ae83deebbc.mp4"
    
    # 输出目录
    output_directory = "/home/ubuntu/文档"
    
    # 开始时间（秒）
    start_time_seconds = 12
    
    # 执行截取
    success = cut_video(input_video, output_directory, start_time_seconds)
    
    if success:
        print("\n视频处理成功!")
    else:
        print("\n视频处理失败!")